保护部署在容器中微服务安全的方法有哪些
保护部署在容器中微服务安全的方法有以下这些:
创建不可变的容器:开发人员倾向于让shell访问图像,这样他们就可以在生产中修复它们。然而,攻击者经常利用这种访问方式注入恶意代码。为了避免这种情况,需要创建不可变的容器。在出现任何缺陷或漏洞时,开发人员可以重新构建和重新部署容器。远程管理是通过运行时API或通过为运行微服务的主机创建远程shell会话来完成的。容器的不可变特性也会影响数据持久性。开发人员应该将数据存储在容器之外,以便在替换其中一些数据时,新版本仍然可以使用所有数据。
仅从可信来源运行映像:对于拥有现成可用容器的开发人员来说,有许多开放源码包,包括Node.js.、Apache Web服务器和Linux操作系统。但是,出于安全目的,你需要知道容器的来源、更新时间以及它们是否没有任何已知的漏洞和恶意代码。最好是建立一个可信的映像存储库,并仅从该可信源运行映像。此外,开发人员应该在将容器投入生产之前检查脚本中的应用程序签名。如果米在多个云环境中运行,那么可以使用多个映像存储库。如果想使用来自其他来源的图像,建议使用扫描工具扫描它们的内容。
使用注册表安全访问图像:Docker Hub、Amazon EC2容器注册中心和Quay容器注册中心等注册中心帮助开发人员存储和管理他们创建的映像。这些注册中心还可以用于提供基于角色的访问控制、只接受来自可信来源的容器、不断更新已知漏洞列表以及标记易受攻击的映像。基于角色的访问控制非常重要,因为你需要控制谁可以将更改引入容器。最好限制对特定管理帐户的访问一个负责系统管理,一个负责操作和编排容器。此外,你应该确保注册中心验证每个容器的签名,并且只接受来自可信来源的签名。你的注册表还应该包含一些功能,帮助你不断检查图像内容的已知漏洞,并告知安全问题。
每个主机部署一个微服务:基于微服务的应用程序可以部署在同一个主机上,也可以部署在多个主机上。因此,这种部署模型导致了管理的复杂性。考虑哪些容器应该部署到哪些主机上,哪些容器需要相互访问,以及如何自动扩展软件容量,最佳实践是在单个主机操作系统内核上对特定微服务的容器进行分组。这种方法在深度上提供了额外的防御,可以给攻击者在危害不同群体时增加难度。如果你的环境比较大,有很多主机,请自动化这个过程。
强化主机操作系统:虽然大多数建议都涉及到微服务和容器的安全性,但是还需要确保主机操作系统的安全性。首先,NIST建议使用特定于容器的主机操作系统,因为它们没有不必要的功能,攻击面会比通用主机小得多。使用允许使用路由器或防火墙控制出口流量的平台也是可取的。其次,CIS Docker基准测试可以提供一系列检查,为你提供关于如何加强系统的良好基线。为了避免数据被盗,限制对底层操作系统资源的容器访问,并将容器彼此隔离。最佳实践是在内核模式下运行容器引擎,而在用户模式下运行容器。此外,Linux提供了多层安全性,限制了容器的功能。Linux中的安全性可以通过使用内核安全特性和模块来实现。
以深度防御的方式保护微服务:这种方法是微服务安全的最重要原则之一,因为它创建了多个安全层以防止攻击,包括过滤通信流、对微服务的访问进行身份验证和授权以及使用加密技术等安全措施。保护你的内部环境不受任何外部连接的影响是第一层防御。如果使用来自公共存储库的映像,这可能对应用程序构成安全风险。通过已知的私有网络管理主机,这样就不会有公开的攻击面。
将自动化的安全测试集成到构建或CI过程中:有许多工具可以在构建或CI过程中自动测试容器。例如,HPFortify和IBMAppScan提供了动态和静态应用程序安全测试。你还可以使用像JFog Xray和Black Duck Hub这样的扫描仪来实时检查容器中已知的漏洞。这些工具标记了已发现的问题,并允许你采取适当的行动。
使用容器本地监控工具:当我们处理Docker时,我们使用Docker安全扫描器或其他特别设计的工具来检测对我们的应用程序的任何潜在威胁。当安全扫描发现恶意软件和已知漏洞时,监控工具会检测出你没有预料到的问题。监控工具首先收集事件,然后根据安全策略检查事件。确定性策略可以定义哪些服务可以运行,以及允许哪些容器发出外部HTTP请求。动态策略可以创建正常通信活动的基线,并通知流量峰值或异常流量。
使用编排经理:协调器从注册中心提取图像,将这些图像部署到容器中,并管理它们的运行。协调器提供的抽象允许你指定给运行定映像所需的容器数量,以及需要为它们分配哪些主机资源。使用编排管理器,不仅可以自动化微服务的部署,还可以确保一定级别的安全性。例如,编排器允许你管理容器的集群、隔离工作负载、限制对元数据的访问和收集日志。
使用API访问控制安全访问微服务:API是包含微服务应用程序的关键。基于这种技术的软件具有多个独立的API服务,这些服务需要额外的工具来管理。因此,确保安全身份验证和授权的API访问控制对于微服务安全性至关重要。开发人员和管理员通常使用OAuth/OAuth2服务器来获取使用API进行身份验证的令牌。出于安全原因,还应该确保所有客户机-服务器通信在传输过程中使用传输层安全(TLS)进行加密。